home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickTime / QuickTime 3 Interfaces & Libs / QTDevWin / CIncludes / AEObjects.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-21  |  13.4 KB  |  283 lines  |  [TEXT/dosa]

  1. /*
  2.      File:        AEObjects.h
  3.  
  4.      Contains:    Object Support Library Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    QuickTime 3.0
  8.  
  9.      Copyright:    © 1991-1998 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __AEOBJECTS__
  19. #define __AEOBJECTS__
  20.  
  21. #ifndef __OSUTILS__
  22. #include <OSUtils.h>
  23. #endif
  24. #ifndef __APPLEEVENTS__
  25. #include <AppleEvents.h>
  26. #endif
  27. #ifndef __ERRORS__
  28. #include <Errors.h>
  29. #endif
  30. #ifndef __EVENTS__
  31. #include <Events.h>
  32. #endif
  33.  
  34.  
  35.  
  36. #if PRAGMA_ONCE
  37. #pragma once
  38. #endif
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. #if PRAGMA_IMPORT
  45. #pragma import on
  46. #endif
  47.  
  48. #if PRAGMA_STRUCT_ALIGN
  49.     #pragma options align=mac68k
  50. #elif PRAGMA_STRUCT_PACKPUSH
  51.     #pragma pack(push, 2)
  52. #elif PRAGMA_STRUCT_PACK
  53.     #pragma pack(2)
  54. #endif
  55.  
  56.  
  57. enum {
  58.                                                                 /****    LOGICAL OPERATOR CONSTANTS    ****/
  59.     kAEAND                        = FOUR_CHAR_CODE('AND '),        /*  0x414e4420  */
  60.     kAEOR                        = FOUR_CHAR_CODE('OR  '),        /*  0x4f522020  */
  61.     kAENOT                        = FOUR_CHAR_CODE('NOT '),        /*  0x4e4f5420  */
  62.                                                                 /****    ABSOLUTE ORDINAL CONSTANTS    ****/
  63.     kAEFirst                    = FOUR_CHAR_CODE('firs'),        /*  0x66697273  */
  64.     kAELast                        = FOUR_CHAR_CODE('last'),        /*  0x6c617374  */
  65.     kAEMiddle                    = FOUR_CHAR_CODE('midd'),        /*  0x6d696464  */
  66.     kAEAny                        = FOUR_CHAR_CODE('any '),        /*  0x616e7920  */
  67.     kAEAll                        = FOUR_CHAR_CODE('all '),        /*  0x616c6c20  */
  68.                                                                 /****    RELATIVE ORDINAL CONSTANTS    ****/
  69.     kAENext                        = FOUR_CHAR_CODE('next'),        /*  0x6e657874  */
  70.     kAEPrevious                    = FOUR_CHAR_CODE('prev'),        /*  0x70726576  */
  71.                                                                 /****    KEYWORD CONSTANT     ****/
  72.     keyAECompOperator            = FOUR_CHAR_CODE('relo'),        /*  0x72656c6f  */
  73.     keyAELogicalTerms            = FOUR_CHAR_CODE('term'),        /*  0x7465726d  */
  74.     keyAELogicalOperator        = FOUR_CHAR_CODE('logc'),        /*  0x6c6f6763  */
  75.     keyAEObject1                = FOUR_CHAR_CODE('obj1'),        /*  0x6f626a31  */
  76.     keyAEObject2                = FOUR_CHAR_CODE('obj2'),        /*  0x6f626a32  */
  77.                                                                 /*    ... for Keywords for getting fields out of object specifier records. */
  78.     keyAEDesiredClass            = FOUR_CHAR_CODE('want'),        /*  0x77616e74  */
  79.     keyAEContainer                = FOUR_CHAR_CODE('from'),        /*  0x66726f6d  */
  80.     keyAEKeyForm                = FOUR_CHAR_CODE('form'),        /*  0x666f726d  */
  81.     keyAEKeyData                = FOUR_CHAR_CODE('seld')        /*  0x73656c64  */
  82. };
  83.  
  84.  
  85. enum {
  86.                                                                 /*    ... for Keywords for getting fields out of Range specifier records. */
  87.     keyAERangeStart                = FOUR_CHAR_CODE('star'),        /*  0x73746172  */
  88.     keyAERangeStop                = FOUR_CHAR_CODE('stop'),        /*  0x73746f70  */
  89.                                                                 /*    ... special handler selectors for OSL Callbacks. */
  90.     keyDisposeTokenProc            = FOUR_CHAR_CODE('xtok'),        /*  0x78746f6b  */
  91.     keyAECompareProc            = FOUR_CHAR_CODE('cmpr'),        /*  0x636d7072  */
  92.     keyAECountProc                = FOUR_CHAR_CODE('cont'),        /*  0x636f6e74  */
  93.     keyAEMarkTokenProc            = FOUR_CHAR_CODE('mkid'),        /*  0x6d6b6964  */
  94.     keyAEMarkProc                = FOUR_CHAR_CODE('mark'),        /*  0x6d61726b  */
  95.     keyAEAdjustMarksProc        = FOUR_CHAR_CODE('adjm'),        /*  0x61646a6d  */
  96.     keyAEGetErrDescProc            = FOUR_CHAR_CODE('indc')        /*  0x696e6463  */
  97. };
  98.  
  99. /****    VALUE and TYPE CONSTANTS    ****/
  100.  
  101. enum {
  102.                                                                 /*    ... possible values for the keyAEKeyForm field of an object specifier. */
  103.     formAbsolutePosition        = FOUR_CHAR_CODE('indx'),        /*  0x696e6478  */
  104.     formRelativePosition        = FOUR_CHAR_CODE('rele'),        /*  0x72656c65  */
  105.     formTest                    = FOUR_CHAR_CODE('test'),        /*  0x74657374  */
  106.     formRange                    = FOUR_CHAR_CODE('rang'),        /*  0x72616e67  */
  107.     formPropertyID                = FOUR_CHAR_CODE('prop'),        /*  0x70726f70  */
  108.     formName                    = FOUR_CHAR_CODE('name'),        /*  0x6e616d65  */
  109.                                                                 /*    ... relevant types (some of these are often pared with forms above). */
  110.     typeObjectSpecifier            = FOUR_CHAR_CODE('obj '),        /*  0x6f626a20  */
  111.     typeObjectBeingExamined        = FOUR_CHAR_CODE('exmn'),        /*  0x65786d6e  */
  112.     typeCurrentContainer        = FOUR_CHAR_CODE('ccnt'),        /*  0x63636e74  */
  113.     typeToken                    = FOUR_CHAR_CODE('toke'),        /*  0x746f6b65  */
  114.     typeRelativeDescriptor        = FOUR_CHAR_CODE('rel '),        /*  0x72656c20  */
  115.     typeAbsoluteOrdinal            = FOUR_CHAR_CODE('abso'),        /*  0x6162736f  */
  116.     typeIndexDescriptor            = FOUR_CHAR_CODE('inde'),        /*  0x696e6465  */
  117.     typeRangeDescriptor            = FOUR_CHAR_CODE('rang'),        /*  0x72616e67  */
  118.     typeLogicalDescriptor        = FOUR_CHAR_CODE('logi'),        /*  0x6c6f6769  */
  119.     typeCompDescriptor            = FOUR_CHAR_CODE('cmpd'),        /*  0x636d7064  */
  120.     typeOSLTokenList            = FOUR_CHAR_CODE('ostl')        /*  0x6F73746C  */
  121. };
  122.  
  123. /* Possible values for flags parameter to AEResolve.  They're additive */
  124.  
  125. enum {
  126.     kAEIDoMinimum                = 0x0000,
  127.     kAEIDoWhose                    = 0x0001,
  128.     kAEIDoMarking                = 0x0004,
  129.     kAEPassSubDescs                = 0x0008,
  130.     kAEResolveNestedLists        = 0x0010,
  131.     kAEHandleSimpleRanges        = 0x0020,
  132.     kAEUseRelativeIterators        = 0x0040
  133. };
  134.  
  135. /**** SPECIAL CONSTANTS FOR CUSTOM WHOSE-CLAUSE RESOLUTION */
  136.  
  137. enum {
  138.     typeWhoseDescriptor            = FOUR_CHAR_CODE('whos'),        /*  0x77686f73  */
  139.     formWhose                    = FOUR_CHAR_CODE('whos'),        /*  0x77686f73  */
  140.     typeWhoseRange                = FOUR_CHAR_CODE('wrng'),        /*  0x77726e67  */
  141.     keyAEWhoseRangeStart        = FOUR_CHAR_CODE('wstr'),        /*  0x77737472  */
  142.     keyAEWhoseRangeStop            = FOUR_CHAR_CODE('wstp'),        /*  0x77737470  */
  143.     keyAEIndex                    = FOUR_CHAR_CODE('kidx'),        /*  0x6b696478  */
  144.     keyAETest                    = FOUR_CHAR_CODE('ktst')        /*  0x6b747374  */
  145. };
  146.  
  147. /**
  148.     used for rewriting tokens in place of 'ccnt' descriptors
  149.     This record is only of interest to those who, when they...
  150.     ...get ranges as key data in their accessor procs, choose
  151.     ...to resolve them manually rather than call AEResolve again.
  152. **/
  153.  
  154. struct ccntTokenRecord {
  155.     DescType                         tokenClass;
  156.     AEDesc                             token;
  157. };
  158. typedef struct ccntTokenRecord            ccntTokenRecord;
  159.  
  160. typedef ccntTokenRecord *                ccntTokenRecPtr;
  161. typedef ccntTokenRecPtr *                ccntTokenRecHandle;
  162. #if OLDROUTINENAMES
  163. typedef AEDesc *                        DescPtr;
  164. typedef DescPtr *                        DescHandle;
  165. #endif  /* OLDROUTINENAMES */
  166.  
  167. /* typedefs providing type checking for procedure pointers */
  168. typedef CALLBACK_API( OSErr , OSLAccessorProcPtr )(DescType desiredClass, const AEDesc *container, DescType containerClass, DescType form, const AEDesc *selectionData, AEDesc *value, long accessorRefcon);
  169. typedef CALLBACK_API( OSErr , OSLCompareProcPtr )(DescType oper, const AEDesc *obj1, const AEDesc *obj2, Boolean *result);
  170. typedef CALLBACK_API( OSErr , OSLCountProcPtr )(DescType desiredType, DescType containerClass, const AEDesc *container, long *result);
  171. typedef CALLBACK_API( OSErr , OSLDisposeTokenProcPtr )(AEDesc *unneededToken);
  172. typedef CALLBACK_API( OSErr , OSLGetMarkTokenProcPtr )(const AEDesc *dContainerToken, DescType containerClass, AEDesc *result);
  173. typedef CALLBACK_API( OSErr , OSLGetErrDescProcPtr )(AEDesc **appDescPtr);
  174. typedef CALLBACK_API( OSErr , OSLMarkProcPtr )(const AEDesc *dToken, const AEDesc *markToken, long index);
  175. typedef CALLBACK_API( OSErr , OSLAdjustMarksProcPtr )(long newStart, long newStop, const AEDesc *markToken);
  176. typedef STACK_UPP_TYPE(OSLAccessorProcPtr)                         OSLAccessorUPP;
  177. typedef STACK_UPP_TYPE(OSLCompareProcPtr)                         OSLCompareUPP;
  178. typedef STACK_UPP_TYPE(OSLCountProcPtr)                         OSLCountUPP;
  179. typedef STACK_UPP_TYPE(OSLDisposeTokenProcPtr)                     OSLDisposeTokenUPP;
  180. typedef STACK_UPP_TYPE(OSLGetMarkTokenProcPtr)                     OSLGetMarkTokenUPP;
  181. typedef STACK_UPP_TYPE(OSLGetErrDescProcPtr)                     OSLGetErrDescUPP;
  182. typedef STACK_UPP_TYPE(OSLMarkProcPtr)                             OSLMarkUPP;
  183. typedef STACK_UPP_TYPE(OSLAdjustMarksProcPtr)                     OSLAdjustMarksUPP;
  184. enum { uppOSLAccessorProcInfo = 0x000FFFE0 };                     /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  185. enum { uppOSLCompareProcInfo = 0x00003FE0 };                     /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  186. enum { uppOSLCountProcInfo = 0x00003FE0 };                         /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  187. enum { uppOSLDisposeTokenProcInfo = 0x000000E0 };                 /* pascal 2_bytes Func(4_bytes) */
  188. enum { uppOSLGetMarkTokenProcInfo = 0x00000FE0 };                 /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
  189. enum { uppOSLGetErrDescProcInfo = 0x000000E0 };                 /* pascal 2_bytes Func(4_bytes) */
  190. enum { uppOSLMarkProcInfo = 0x00000FE0 };                         /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
  191. enum { uppOSLAdjustMarksProcInfo = 0x00000FE0 };                 /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
  192. #define NewOSLAccessorProc(userRoutine)                         (OSLAccessorUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLAccessorProcInfo, GetCurrentArchitecture())
  193. #define NewOSLCompareProc(userRoutine)                             (OSLCompareUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLCompareProcInfo, GetCurrentArchitecture())
  194. #define NewOSLCountProc(userRoutine)                             (OSLCountUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLCountProcInfo, GetCurrentArchitecture())
  195. #define NewOSLDisposeTokenProc(userRoutine)                     (OSLDisposeTokenUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLDisposeTokenProcInfo, GetCurrentArchitecture())
  196. #define NewOSLGetMarkTokenProc(userRoutine)                     (OSLGetMarkTokenUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLGetMarkTokenProcInfo, GetCurrentArchitecture())
  197. #define NewOSLGetErrDescProc(userRoutine)                         (OSLGetErrDescUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLGetErrDescProcInfo, GetCurrentArchitecture())
  198. #define NewOSLMarkProc(userRoutine)                             (OSLMarkUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLMarkProcInfo, GetCurrentArchitecture())
  199. #define NewOSLAdjustMarksProc(userRoutine)                         (OSLAdjustMarksUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLAdjustMarksProcInfo, GetCurrentArchitecture())
  200. #define CallOSLAccessorProc(userRoutine, desiredClass, container, containerClass, form, selectionData, value, accessorRefcon)  CALL_SEVEN_PARAMETER_UPP((userRoutine), uppOSLAccessorProcInfo, (desiredClass), (container), (containerClass), (form), (selectionData), (value), (accessorRefcon))
  201. #define CallOSLCompareProc(userRoutine, oper, obj1, obj2, result)  CALL_FOUR_PARAMETER_UPP((userRoutine), uppOSLCompareProcInfo, (oper), (obj1), (obj2), (result))
  202. #define CallOSLCountProc(userRoutine, desiredType, containerClass, container, result)  CALL_FOUR_PARAMETER_UPP((userRoutine), uppOSLCountProcInfo, (desiredType), (containerClass), (container), (result))
  203. #define CallOSLDisposeTokenProc(userRoutine, unneededToken)     CALL_ONE_PARAMETER_UPP((userRoutine), uppOSLDisposeTokenProcInfo, (unneededToken))
  204. #define CallOSLGetMarkTokenProc(userRoutine, dContainerToken, containerClass, result)  CALL_THREE_PARAMETER_UPP((userRoutine), uppOSLGetMarkTokenProcInfo, (dContainerToken), (containerClass), (result))
  205. #define CallOSLGetErrDescProc(userRoutine, appDescPtr)             CALL_ONE_PARAMETER_UPP((userRoutine), uppOSLGetErrDescProcInfo, (appDescPtr))
  206. #define CallOSLMarkProc(userRoutine, dToken, markToken, index)     CALL_THREE_PARAMETER_UPP((userRoutine), uppOSLMarkProcInfo, (dToken), (markToken), (index))
  207. #define CallOSLAdjustMarksProc(userRoutine, newStart, newStop, markToken)  CALL_THREE_PARAMETER_UPP((userRoutine), uppOSLAdjustMarksProcInfo, (newStart), (newStop), (markToken))
  208.  
  209.  
  210.  
  211. EXTERN_API( OSErr )
  212. AEObjectInit                    (void);
  213.  
  214. /* Not done by inline, but by direct linking into code.  It sets up the pack
  215.   such that further calls can be via inline */
  216. EXTERN_API( OSErr )
  217. AESetObjectCallbacks            (OSLCompareUPP             myCompareProc,
  218.                                  OSLCountUPP             myCountProc,
  219.                                  OSLDisposeTokenUPP     myDisposeTokenProc,
  220.                                  OSLGetMarkTokenUPP     myGetMarkTokenProc,
  221.                                  OSLMarkUPP             myMarkProc,
  222.                                  OSLAdjustMarksUPP         myAdjustMarksProc,
  223.                                  OSLGetErrDescUPP         myGetErrDescProcPtr)                THREEWORDINLINE(0x303C, 0x0E35, 0xA816);
  224.  
  225. EXTERN_API( OSErr )
  226. AEResolve                        (const AEDesc *            objectSpecifier,
  227.                                  short                     callbackFlags,
  228.                                  AEDesc *                theToken)                            THREEWORDINLINE(0x303C, 0x0536, 0xA816);
  229.  
  230. EXTERN_API( OSErr )
  231. AEInstallObjectAccessor            (DescType                 desiredClass,
  232.                                  DescType                 containerType,
  233.                                  OSLAccessorUPP         theAccessor,
  234.                                  long                     accessorRefcon,
  235.                                  Boolean                 isSysHandler)                        THREEWORDINLINE(0x303C, 0x0937, 0xA816);
  236.  
  237. EXTERN_API( OSErr )
  238. AERemoveObjectAccessor            (DescType                 desiredClass,
  239.                                  DescType                 containerType,
  240.                                  OSLAccessorUPP         theAccessor,
  241.                                  Boolean                 isSysHandler)                        THREEWORDINLINE(0x303C, 0x0738, 0xA816);
  242.  
  243. EXTERN_API( OSErr )
  244. AEGetObjectAccessor                (DescType                 desiredClass,
  245.                                  DescType                 containerType,
  246.                                  OSLAccessorUPP *        accessor,
  247.                                  long *                    accessorRefcon,
  248.                                  Boolean                 isSysHandler)                        THREEWORDINLINE(0x303C, 0x0939, 0xA816);
  249.  
  250. EXTERN_API( OSErr )
  251. AEDisposeToken                    (AEDesc *                theToken)                            THREEWORDINLINE(0x303C, 0x023A, 0xA816);
  252.  
  253. EXTERN_API( OSErr )
  254. AECallObjectAccessor            (DescType                 desiredClass,
  255.                                  const AEDesc *            containerToken,
  256.                                  DescType                 containerClass,
  257.                                  DescType                 keyForm,
  258.                                  const AEDesc *            keyData,
  259.                                  AEDesc *                token)                                THREEWORDINLINE(0x303C, 0x0C3B, 0xA816);
  260.  
  261.  
  262.  
  263. #if PRAGMA_STRUCT_ALIGN
  264.     #pragma options align=reset
  265. #elif PRAGMA_STRUCT_PACKPUSH
  266.     #pragma pack(pop)
  267. #elif PRAGMA_STRUCT_PACK
  268.     #pragma pack()
  269. #endif
  270.  
  271. #ifdef PRAGMA_IMPORT_OFF
  272. #pragma import off
  273. #elif PRAGMA_IMPORT
  274. #pragma import reset
  275. #endif
  276.  
  277. #ifdef __cplusplus
  278. }
  279. #endif
  280.  
  281. #endif /* __AEOBJECTS__ */
  282.  
  283.